<?php
namespace observer;

class LoginObservable implements ObservableInterface
{

    //观察者列表
    private $_observerList = [];

    //被观察者名称
    //举个栗子，有一交友网站，用户一登录，就给TA推送感兴趣的男/女生类型让TA关注，给TA推送最新的线下交友活动信息，记录登录日志
    private $_name = '用户登录行为';

    public function addObserver(ObserverInterface $observer)
    {
        if( ! in_array($observer, $this->_observerList, true)) {
            $this->_observerList[] = $observer;
        }
        return;
    }

    public function deleteObserver(ObserverInterface $observer)
    {
        $key = array_search($observer, $this->_observerList, true);
        if(false !== $key) {
            unset($this->_observerList[$key]);
        }
    }

    public function notify()
    {
        //登录校验逻辑 略
        //通知各个观察者（调用各业务类中的方法）
        foreach($this->_observerList as $observer) {
            $observer->doSomething($this);
        }
    }

    public function __set($name, $value) 
    {
        $this->$name = $value;
    }

    public function __get($name)
    {
        return $this->$name;
    }

}